package com.shujia.scala

object Demo21match {
  def main(args: Array[String]): Unit = {

    /**
      * 模式匹配：
      *
      * java中的模式匹配可以匹配：基本数据类型，字符串，枚举
      *
      * scala中的模式匹配可以匹配，基本数据类型字符串，枚举，对象，类型
      *
      */


    //匹配基本数据类型

    val i: Double = 100.1

    /**
      * 按照顺序执行case ,只有一个可以匹配成功
      *
      */

    i match {
      case 100 => {
        //如果一行不够，增加大括号写多行
        println(100)
      }
      case 10 => println(10)
      case 100.1 => println(100.1)
      case _ => println("默认")
    }


    /**
      * 匹配字符串
      *
      */
    val str: String = "java"

    str match {
      case "java" => println("java")
      case "scala" => println("scala")
    }

    /**
      * 匹配对象
      *
      */

    case class User(id: String, name: String)

    val user: User = User("001", "张三")

    user match {
      case User("001", "张三") => println("张三")
      case User("002", "李四") => println("李四")
      case _ => println("其它")
    }

    /**
      * 匹配类型
      *
      */

    //Any 相当于Object

    val a: Any = "java"

    a match {
      //如果匹配成功i相当于a的引用
      case i: Int => println(s"$i 是int类型")
      case s: String => println(s"$a 是一个字符串")
      case u: User => println(s"$u 是一个User")
      case _ => println("其它")
    }


    val map = Map("001" -> "张三", "002" -> "李四")


    /**
      * Option:是一个可选的值，有两个取值，Some   None
      *
      */

    val opt: Option[String] = map.get("003")


    /**
      * match 可以有返回值
      *
      */

    val value: String = opt match {
      case Some(v) => v
      case None => "默认值"
    }


    println(value)

    //相当于
    println(map.getOrElse("001", "默认值"))

  }
}
